You really should have this setup differently. If you are going to have 2 of the 3 services running on the same server, it should be HAProxy and Varnish, with requests that cant be immediately returned from varnishes cache, then sent over to NGINX. You don't want the cache servers also doing the processing, you semi defeat the purpose. Also doing it this way allows you to create smaller instances because it's an in memory cache, so you don't need alot of other resources. While cache misses get sent back to a larger server that processes code regularly and responds to just those requests. The way you have it setup you have to scale based on volume of requests in the same way that you would without varnish, and using php cache or apc.
Having stated that, your Varnish/NGINX servers will have the highest load, as it's serving cache and processing all the web requests. HAProxy is just doing a hand off, not doing any processing or serving of content.