Sorry it was one extra opening parentheses. The syntax coloring should show you the first one is pink in that long sequence of opening parentheses.
Doing it the more general way will make it easier to see if things are right. Define your list of countries e.g. as above use the variable name countrylist. Get the list of populations as above. Then make the list of country language fractions in a similar manner.
languagefractions=Map[Function[country,CountryData[country, "LanguagesFractions"], countrylist]
Then get the languages
languages=Apply[Union, languagefractions[[All,All,1]]];
Then get the number of language users in each country
users[population_, fractions_, language_]:= population*(language/.Append[fractions,_->0])
You could use Map or MapThread with Total, but maybe simpler to use Sum.
Map[Function[lang,lang->Sum[users[populations[[i]], languagefractions[[i]], lang], {i, 1, Length[countrylist]}]/Total[populations]],
languages]