#include #include #include #include #include #include #include using namespace std; map mp; bool isPrime(long long x) { for(long long i=2;i<=sqrt(x);i++) { if(x%i == 0) return false; } return true; } long long getMax(long long x) { if(mp.find(x)==mp.end()) { if(isPrime(x)) { mp.insert(pair(x, x+1)); return x+1; } else { long long number; long long maxValue = -1; for(long long i=1; i<=x/2 ; i++) { if(x%i == 0) { int y = getMax(i); long long nParts = x/i; long long z = nParts * y; if(z > maxValue ) { maxValue = z; } } } mp.insert(pair(x, maxValue+1)); return maxValue+1; } } else { pair p = *mp.find(x); return p.second; } } int main() { mp.insert(pair(1, 1)); int n; cin >> n; vector a(n); for (int i = 0; i < n; i++) { cin >> a[i]; } long long sum =0; for(int i=0; i