All that Blynk.syncVirtual(vPin) does is to cause the corresponding BLYNK_WRITE(vPin) callback to ‘fire’.
You need to have a BLYNK_WRITE(V2) and BLYNK_WRITE(V3) callback that will accept the incoming value from those virtual datastreams and assign those values to variables, in a similar way to what you’ve done with the V4 datastream.
Maybe you should read this to gain a better understanding…