I just tackled the same problem, one option to do this is to drive each SN3218 from its own software I2C bus (plus one from the hardware I2C pins), this way you could drive a handful of them (even if not the huge amount you could with TLC5940, TLC5947 and the like).
I've posted the code to do that at https://forum.arduino.cc/index.php?topic=358677.0
Why would one want to do that? Because SN3218 is quite a bit cheaper, both in breakout board format and as a standalone chip.