#include using namespace std; long *determinedCount; long FindSqL(long num) { if (determinedCount[num] > 0) return determinedCount[num]; long halfN = num / 2; long j = halfN; long maxC = 1+ num; for (long i = 2; i <= j; i++) { long mult = num / i; long rem = num % i; if (rem == 0) { long len1 = 1+ FindSqL(i) * mult; long len2 = 1+ FindSqL(mult) * i; j = mult; if (len1 > maxC)maxC = len1; if (len2 > maxC)maxC = len2; } } determinedCount[num] = maxC; return maxC; } long longestSequence(vector a) { // Return the length of the longest possible sequence of moves. long maxN = a[0]; for (int i = 1; i < a.size(); i++) { if (a[i] > maxN)maxN = a[i]; } determinedCount = new long[maxN+1]; for (int i = 0; i <= maxN; i++) determinedCount[i] = 0; determinedCount[1] = 1; long retV = 0; for (int i = 0; i < a.size(); i++) { retV += FindSqL(a[i]); } return retV; } 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; delete[] determinedCount; return 0; }