#include #define long long long using namespace std; long nn,arr[102],dp[20000],tmp[20000],ttm; int cnt; vectordv[20000]; unordered_mapmp; void divisor(long n) { int id=mp[n]; if(dv[id].size()||n==1)return ; int lim=sqrt(n); dv[id].push_back(1); ttm=0; for(int i=2; i<=lim; i++) { if(n%i==0) { if(i*i==n)dv[id].push_back(i); else { dv[id].push_back(i); tmp[++ttm]=n/i; } } } while(ttm)dv[id].push_back(tmp[ttm--]); } long fxxx(long n) { long id=mp[n]; if(n==1)return 1; if(dp[id]!=0)return dp[id]; long ans=0; for(auto x:dv[id]) { ans=max(ans,1+(n/x)*fxxx(x)); } return dp[id]=ans; } int main() { scanf("%lld",&nn); for(int i=1; i<=nn; i++) { scanf("%lld",&arr[i]); if(mp[arr[i]]==0) { mp[arr[i]]=++cnt; divisor(arr[i]); int id=cnt; for(int k=1;k