So main issue is to recognise the traffic. Example: for torrent traffic I have found the P2P profile unreliable (partly because more and more is SSL-based and thus encrypted and hidden from inspection) to consistently route traffic through my VPN without IP-leakage. So I have a src-address based mangle rule from my torrent server.
But something similar to below is working perfect for me.
#mark specific traffic to different VPN connections
/ip firewall mangle
add comment="DNS" dst-port=53 action=mark-routing new-routing-mark=vpn1_route
add comment="webbrowsing" dst-port=80,443 action=mark-routing new-routing-mark=vpn2_route
add comment="torrents" src-address=TORRENT_SERVER_IP action=mark-routing new-routing-mark=vpn3_route
#mark twitch for queue
/ip firewall mangle add action=mark-packet chain=prerouting new-packet-mark=twitch_cap src-address=TWITCH_SERVER_IP
#setup routes
/ip route
add gateway=VPN1_GATEWAY_IP routing-mark=vpn1_route
add gateway=VPN2_GATEWAY_IP routing-mark=vpn2_route
add gateway=VPN3_GATEWAY_IP routing-mark=vpn3_route
add gateway=WAN1_GATEWAY_IP routing-mark=wan1_route
add gateway=WAN2_GATEWAY_IP routing-mark=wan2_route
add gateway=WAN1_GATEWAY_IP distance=1
add gateway=WAN2_GATEWAY_IP distance=2
#add queue
/queue simple add max-limit=2M/2M name=twitch packet-marks=twitch_cap target=LOCAL_TWITCH_SUBNET_OR_IP
You could enhance the traffic shaping with queue trees and adding priorities.
The rest of the traffic you can handle through the Thomas' loadbalance script included in the slides I posted above. I had a use case to try and it works as advertised. Just make sure you properly add the VPN connections to the first rule to bypass the LB and mark traffic destined for that VPN before it hits the LB mangle rules.
As you have WAN traffic coming through the VPN connections as well, you want to mark incoming traffic on the VPN connections to make sure they go out the same way. Use the same pattern as provided in the slides for the incoming WAN connections, like
/ip firewall mangle
add chain=forward connection-mark=no-mark in-interface=vpn1 action=mark-connection new-connection-mark=vpn1->lan
add chain=prerouting connection-mark=vpn1->lan src-address-list=lan action=mark-routing new-routing-mark=vpn1_route