You can do this, but I am not sure this makes much sense.
You can create a function that takes the ICO address, the ether amount, and the gas amount. This function just forwards this ether to the ICO's address that you input.
Every ICO saves a balance, in each of these, you will find a mapping variable. When you index this with your contract's address you will see how much you have.
Your contract (and all of the contracts that exist, except token-contracts) does not receive (hold) tokens. What happens instead, is that the ICOs contract balances, when you buy, show that an amount of the tokens belong to a particular address (your contract address in this case). So if you buy using the contract, your contract is the owner of the tokens and you will need to implement a function in your contract to move the tokens to your personal address (or any other address) at some point, if you do not do that, the tokens will be locked forever.
I hope this helps.