#include #include #include #include #include #include #include #include #include #include #include #define mod 1000000007 typedef long long li; using namespace std; typedef struct data { li q; li r; } data; /*class comparison //for Priority Queue { public : bool operator()(customer a,customer b) { int pra=0,prb=0; pra=a.next; prb=b.next; if(pran.a) return 1; else if(m.an.d) return 1; else return -1; } }*/ int exp(int x, int y) { if(y==0) return 1; int z=0; z=exp(x,y/2); z=z*z; if((y%2)==1) z=z*x; return z; } /*Disjoint-Set Data Structure*/ /*vector L; void Make_Set(int N,int S[]) { L.resize(N); int i=0; for(i=0;i Prime; int P[1000005]; void seive() { int i=0,j=0; for(i=0;i<1000005;i++) { P[i]=0; } P[0]=1; P[1]=1; for(i=2;i<1000005;i++) { if(P[i]==1) continue; else { Prime.push_back(i); j=i+i; while(j<1000005) { P[j]=1; j+=i; } } } } long longestSequence(vector a) { // Return the length of the longest possible sequence of moves. li R = 0; for (li v : a) { R += v; li x = v; for (li p : Prime) { while (x % p == 0) { x = x / p; R += x; } } if (x > 1) R++; } return R; } int main() { seive(); 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; }