#include #include #include #include using namespace std; static map arr; long calc(long a){ int size = arr.size(); long i = 0; long max = 0; long temp = 0; long max1 = 0; long max2 = 0; long maxt = 0; long lim = (long)sqrt(a); auto itr = arr.find(a); if(itr != arr.end()){ return itr->second; } for(i = 2;i <= lim;i++){ if(a%i == 0){ max1 = 1 + i*calc(a/i); max2 = 1 + (a/i)*calc(i); if(max1 > max2){ temp = max1; }else{ temp = max2; } if(max < temp){ max = temp; } } } if(max == 0){ max = 1 + a; } arr.insert(make_pair(a,max)); return max; } long longestSequence(vector a) { // Return the length of the longest possible sequence of moves. int size = a.size(); vector ans(size); long i = 0; long max = 0; long result = 0; long maxs = 0; arr.insert(make_pair(0,0)); arr.insert(make_pair(1,1)); arr.insert(make_pair(2,3)); /* for(int j = 0;j < a.size();j++){ if(max < a[j]){ max = a[j]; } } */ sort(a.begin(), a.end()); for(i = 0;i < size;i++){ ans[i] = calc(a[i]); // cout << a[i] << " = " << ans[i] << " ;"; } for(i = 0;i < size;i++){ result = result + ans[i]; } return result; } int main() { 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; }