#ifdef _MSC_VER #define _CRT_SECURE_NO_WARNINGS #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long int64; typedef unsigned long long uint64; #define two(X) (1<<(X)) #define twoL(X) (((int64)(1))<<(X)) #define contain(S,X) (((S)&two(X))!=0) #define containL(S,X) (((S)&twoL(X))!=0) const double pi=acos(-1.0); const double eps=1e-11; template inline void ckmin(T &a,T b){if(b inline void ckmax(T &a,T b){if(b>a) a=b;} template inline T sqr(T x){return x*x;} typedef pair ipair; #define SIZE(A) ((int)A.size()) #define LENGTH(A) ((int)A.length()) #define MP(A,B) make_pair(A,B) #define PB(X) push_back(X) #define FOR(i,a,b) for(int i=(a);i<(b);++i) #define REP(i,a) for(int i=0;i<(a);++i) #define ALL(A) A.begin(),A.end() int64 solve(int64 n) { if (n<=1) return 0; vector a; for (;n%2==0;n/=2) a.push_back(2); for (int p=3;p<=n/p;p+=2) for (;n%p==0;n/=p) a.push_back(p); if (n>1) a.push_back(n); reverse(ALL(a)); int64 ret=0,e=1; for (int64 d:a) ret+=e,e*=d; return ret; } int64 longestSequence(vector a) { // Return the length of the longest possible sequence of moves. int64 ret=0; for (int64 m:a) ret+=solve(m)+m; return ret; } int main() { int n; cin >> n; vector a(n); for(int a_i = 0; a_i < n; a_i++){ cin >> a[a_i]; } int64 result = longestSequence(a); cout << result << endl; return 0; }