When you are using VB as your parser for Calculate field, the field names must be enclosed in brackets []. (For Python as the parser, field names are enclosed in exclamation points !!) See the help for Calculate Field.
So, in your example, an easy way to code it would be thus, using str.format():
arcpy.CalculateField_management(table, "field",
"[{0}] + [{1}] + [{2}]".format(field1, field2, field3), "VB", "")
This can become a bit unwieldy when you are summing up a lot of fields, so the following is a good alternative:
fieldlist = [field, field2, field3, etc.]
fields = ",".join("!{0}!".format(x) for x in fieldlist)
arcpy.CalculateField_management(table, "field",
"sum([{0}])".format(fields), "PYTHON", "")
The same can be applied to your ListFields() to make that a bit simpler (and easier to understand in my opinion). You need to cast to string since ListFields() returns unicode. If you are only returning one field at a time, adding [0] (which just accesses the first item in the list) will return a string:
field1 = [str(f.name) for f in arcpy.ListFields(fclass, "*{0}_{1}*".format(m1,yr1))]][0]