#include #include #include using namespace std; vector getAllFactors(vector num){ vector factors; vector:: iterator it; for(it = num.begin(); it != num.end();++it){ for(long long i = 1; i <= ceil(sqrt(*it)); i++){ if(*it % i == 0){ vector :: iterator itt = find(factors.begin(),factors.end(),i); if(itt == factors.end()){ factors.push_back(i); } itt = find(factors.begin(),factors.end(),(*it)/i); if(itt == factors.end()){ factors.push_back(*it/i); } } } } return factors; } vector getFactors(long long num){ vector factors; for(long long i = 1; i <= ceil(sqrt(num)); i++){ if(num % i == 0){ factors.push_back(i); factors.push_back(num/i); } } return factors; } long long longestSequence(vector a) { sort(a.begin(),a.end()); long long n = a.at(a.size() - 1); vector f = getAllFactors(a); sort(f.begin(),f.end()); map values; for(int i = 0; i < f.size(); i++){ values[f[i]] = 0; } values[1] = 1; for(vector:: iterator i = f.begin(); i != f.end(); ++i){ vector fac = getFactors(*i); sort(fac.begin(),fac.end()); long long max_val = -3333333; if(*i != 1){ for(long long j = 0; j < fac.size();j++){ long long temp = fac[j]; if(temp == 1){ max_val = max(max_val, values[temp]*(*i+1)); } else{ if((*i/temp)*values[temp]+1 > max_val) max_val = (*i/temp)*values[temp] + 1; } } values[*i] = max_val; } } long long total = 0; for(long long i = 0; i < a.size(); i++){ total += values[a[i]]; } return total; } int main() { int n; cin >> n; vector a(n); for(long long a_i = 0; a_i < n; a_i++){ cin >> a[a_i]; } cout << longestSequence(a); return 0; }