Not sure if this would work. I have seen similar routings when I have tried to go to CPT from YYZ. Don't know about YYC:
YYC-YYZ-IST (STOP) or FRA
IST-JNB-CPT (STOP)
CPT-JNB-GRU (STOP)
GRU-YYZ-YYC.
That's about the closest I can come. You would need to use IST or FRA as a base to fly around Europe and back to IST and also do a flight from GRU-GIG and back so it is probably not what you were looking for.