#include using namespace std; vector alldivisors; void filldivisors(long max) { alldivisors.clear(); alldivisors.push_back(2); alldivisors.push_back(3); alldivisors.push_back(5); long curval = 7; while (curval < max) { bool good = true; for(int i = 0; i < alldivisors.size() && good; i++){ if(curval % alldivisors[i] == 0) { good = false; } } if(good) { alldivisors.push_back(curval); } curval += 2; } } vector divisors(long a) { vector result; long divnum = 0; long curdiv = alldivisors[divnum]; long divn = alldivisors.size(); if(curdiv == 0) { exit(1); } while (a > 1) { while (a % curdiv != 0 && curdiv * curdiv <= a) { divnum++; if(divnum < divn) { curdiv = alldivisors[divnum]; } else { curdiv = a; } //cout << "e"; } while (a % curdiv == 0) { result.push_back(curdiv); a /= curdiv; } if(curdiv * curdiv >= a && a > 1) { result.push_back(a); a = 1; } } return result; } long longestSequence(vector a) { // Return the length of the longest possible sequence of moves. long result = 0; for(int i = 0; i < a.size(); i++){ vector divs = divisors(a[i]); long pres = 0; long curparts = 1; int divN = divs.size(); for(int j = 0; j < divN; j++){ if (j==0) { pres += 1; curparts *= divs[divN - j - 1]; } else { pres += curparts; curparts *= divs[divN - j - 1]; } } pres += curparts; result += pres; } return result; } int main() { filldivisors(100001); int n; cin >> n; vector a(n); for(int a_i = 0; a_i < n; a_i++){ cin >> a[a_i]; } long result = longestSequence(a); cout << result << endl; return 0; }