#include using namespace std; unordered_map maxSeq; bool isPrime(long long value){ if(value <=1) false; if(value <= 3) true; if(value % 2== 0 || value % 3 == 0) return false; for(long long i = 5; i * i <= value; i=i+6) if(value % i == 0 || value % (i + (long long) 2) == 0){ return false; } return true; } long long getMaxSum(long long value, vector &f){ //cout<<"----"< 0) return maxSeq[value]; if(f.size() == 0) return value + (long long)1; vector facList; long long myMax = 0, temp, ans = 0, myFac; for(long long i: f) if(value % i == 0 && i != value) facList.push_back(i); //for(auto i: facList) cout< myMax){ myMax = temp; myFac = i;} } //cout<<"max :"< &f){ for(long long i = 1; i <= (sqrt(value) + 1); i++){ if(value % i == 0){ if(value / i == i) f.push_back(i); else{ f.push_back(i); f.push_back(value / (long long)i); } } } } int main(){ int n; long long value, ans = 0; cin>>n; maxSeq.clear(); maxSeq[1] = 1;//maxSeq[2] = 3;maxSeq[3] = 4;maxSeq[4] = 7;maxSeq[5] = 6;maxSeq[6] = 10;maxSeq[7] = 8; for(int i = 0; i < n; i++){ vector factors; cin>>value; if(maxSeq[value] > 0){ ans += maxSeq[value]; continue;} if(isPrime(value)){ maxSeq[value] = (value + (long long)1); ans += maxSeq[value]; } else{ findFactors(value, factors); sort(factors.begin(), factors.end()); maxSeq[value] = getMaxSum(value, factors); ans += maxSeq[value]; } } cout<