Your circuit seems to be ok to start communicating from the Raspberry Pi to the IO expander through I2c, but I don't understand why you use 3v3 for the address pin(s) (see pin 15 of the left MCP23017 on your breadboard), while the device itself is powered with 5V . You should use 5V for the addressing pins too, in case you want to assign a "1" to them...
You're kind of lucky now, since the minimum level for a "1" on the address pins A0 and A1 is 0.25 x Vdd + 0.8 V = 2,05 V (see datasheet of the MCP23017, chapter 2.1 DC Characteristics, Param No. D040).
If you would have chosen to assign a "1" to address pin A2 by means of the 3V3 power supply of the Raspberry Pi, it would have gone wrong, since for that pin the minimum input high voltage must be 0.8 x Vdd, being 0.8 x 5V = 4V!!! See same chapter, Param No. D041.
Now that I'm even looking more close to the specs of the device, I think you might get problems with your I2c levels too. Still according parameter no. D041 of the datasheet, the minimum input high voltage of SCL and SDA must also be 0.8 x Vdd. That is 4V.
However, since the Raspberry Pi only delivers a max. of 3V3 on the I2c pins, you're too low.
I think the best you can do for the moment, is to power your MCP's with 3V3 too. Or you put an I2c level converter between the Raspberry I2c and the MCP I2c...