#include using namespace std; map c; map pr; bool isp(long n) { if(pr.find(n)!=pr.end()) return pr[n]; long s=sqrt(n); for(long p=2;p<=s;++p) {if(n%p==0) { pr[n]=false; return false; } } pr[n]=true; return true; } long calc(long n) { if(c.find(n)!=c.end()) return c[n]; long s=sqrt(n); long ans=1; for (long p=2; p<=s;++p) { if(n%p==0) {/* if(isp(p)) ans=max(ans,1+p*calc(n/p)); if(isp(n/p)) ans=max(ans,1+(n/p)*calc(p));*/ if(isp(n/p)) { ans=n/p; break; } if(isp(p)) ans=max(ans,p); } } if(ans==1) ans=n+1; else ans=1+ans*calc(n/ans); c[n]=ans; return ans; } long longestSequence(vector a) { // Return the length of the longest possible sequence of moves. long ans =0 ; for(auto it=a.begin(); it!=a.end();++it) { ans+=calc(*it); //cout<> n; c[1]=1; 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; }