|"looks like octal strikes again"|
I tend to disagree, it seems that set /a is hard coded to not accept variables that start with numbers(obviously).
It seems to really be complaining about the letters after 3, perhaps if the first token starts with a number it expects no variable assignment to be involved. This can be further tested by "set /a 3 = 2+1" where it complains of a missing operator instead.
Validly check seems to be the most likely cause because all notations must start with a number, "0x" for hex, "0" for octal and 1-9 for decimal.