Firstly, you don't need to escape the dot in the replacement section (because in that part of the command it doesn't have another possible meaning).
However, that's not the cause of your problem, which is instead that you're using \1 (the first captured group), but your expression doesn't contain any groups.
You can fix this either by adding one:
:%s,^\(\d\),3.\1
Or more simply by using \0 (the entire match) instead:
:%s,^\d,3.\0
Note also that the g flag is unnecessary and so is the \+ repeat. Your expression can only match at the start of the line, so there can only ever be a single match to replace. And ^\d will match the correct position in e.g. "30." just as well as ^\d\+
– Christian Brabandt Jul 26 '18 at 12:15:%s,^\d,3.\0even shorter::%s,^\d,3.&