If I understand you correctly all you need to do is to have an aggregator polling from OutputChannel(Queue) and outputting message to another channel which essentially is hooked up to a final aggregator. So basically since you have two layers of splitting you should have two layers of aggregation, than in the final aggregator where you'll aggregation will happen based on 2 messages (first layer of splitting) you can filter out the messages you don't need that came form aggregation result of 3 service activator you hav there.
Code:
------Gateway----
|
inputChannel
|
Filter
|
Splitter
|||||
Router
/ \
/ \
/ \
(SA) Splitter (SplitChannel)
/ \\
OutputChannel(Queue) ||
| /|\
| / | \
| / | \
| / | \
| (SA) (SA) (SA)
| / | \
| OutputChannel(Queue)
| |
| Aggregator
| |
| some-channel
| |
Aggregator (which will aggregate the message based on the correlation key)