To answer this question, it is useful to divide up the load balancing requirement into "in front of" (ingress) and "behind" (egress) the Gateways.
In front of the Gateways (ingress), if there is already a load-balancer in place, then it's natural to deploy the Gateways in Active-Active configuration behind it. If the reporting or routing requires the source IP address, then load balancer can place this into the X-Forwarded header and the Gateway consumes this.
Policy Director is used to send the same configuration to multiple Gateways in an Active-Active cluster (and if there is a hot-standby, then to it also).
The distributed caching across the Gateways is used to keep state (eg message counts for throttling across Gateways in a cluster).
If there is no load-balancer in place, then it's simple to setup a cluster of Gateways with a VIP (Virtual IP address) shared across them. Policy Director is used to keep the configuration in sync.
Behind the Gateways (egress), you can use the Gateway's inbuilt load-balancing. This can be Round-Robin across backend servers, or weighted on response time (Gateways will then favor faster backend servers). So there is no need for a Load Balancer behind the Gateway. Load-balancing in the Gateway is configured within a "Remote Host" in Policy Studio.