#include #include #include #include #include #include using namespace std; map arr; long long fun(long long n) { if(arr[n]!=0) return arr[n]; // if(a&1) // { long long temp=sqrt(a),i; // for( i=2; i<=temp; i++) // if(a%i==0) // { // arr[a]=i*fun(a/i)+1; // break; // } // if(i>temp) // { arr[a]=a+1; // return a+1; // } // } // else // { /* long long large,num=a,temp=sqrt(a),t; t=temp; for( long long i=2; num!=1&&i<=temp; i++) { while( num%i==0) { num/=i; large=i; temp=num; } } if(temp==t) arr[a]=a+1; else arr[a]=large*fun(a/large)+1; */ long long large=0,t=n,l=sqrt(n),i; while (n%2 == 0) { large=2; // printf("%d ", 2); n = n/2; } // n must be odd at this point. So we can skip // one element (Note i = i +2) for ( i = 3; i <= sqrt(n); i = i+2) { // While i divides n, print i and divide n while (n%i == 0) { large=i; // printf("%d ", i); n = n/i; } } // This condition is to handle the case when n // is a prime number greater than 2 if (large==0) { arr[t]=t+1; } else { if(n!=1) large=n; arr[t]=large*fun(t/large)+1; } // } return arr[t]; } int main() { arr[1]=1; arr[2]=3; arr[3]=4; arr[4]=7; arr[5]=6; int n; cin >> n; long long max=0; vector a(n); for (int i = 0; i < n; i++) { cin >> a[i]; } unsigned long long ans=0; for (int i = 0; i < n; i++) { ans+=fun(a[i]); } cout<