//Dec 16, 2017 8:05:39 AM //Loki //package wc12; import java.util.*; public class BreakingSticks { static boolean a[]; static HashSet primes=new HashSet<>(); static void fillPrime(long N) { // int N=1000001; int sqN=(int)Math.sqrt(N)+1; a=new boolean[sqN]; a[0]=a[1]=true; a[2]=a[3]=false; int count=0; for(int i=2;i map=new HashMap<>(); public static void main(String[] asd) { fillPrime(100); map.put(1, 1L); // System.out.println(primes); // System.out.println(map); Scanner s = new Scanner(System.in); int t = s.nextInt(); long ans=0; while(t-->0) { ans+=solve(s.nextLong()); } System.out.println(ans); // System.out.println(primes); // System.out.println(map); } private static long solve(long n) { // TODO Auto-generated method stub long max=0,tmp=0; if(n==1) return 1; if(map.containsKey((int)n)) { return map.get((int)n); }else { tmp=0; max=0; for (int i=2,sqrt=(int)Math.sqrt(n); i<=sqrt; i++){ if (n%i==0) { long val1=getVal(n/i); long val2=getVal(i); if((n/i)*val2>i*val1) { tmp=(n/i)*val2; }else { tmp=i*val1; } // System.out.println(tmp+"--->"+i); max=Math.max(max, tmp); } } map.put((int)n, max+1); } return max+1; } private static long getVal(long l) { if(map.containsKey((int)l)) return map.get((int)l); else { long max=0,tmp=0; //for(int j=4;j<=l;j++) { max=0; tmp=0; for (int i=2,sqrt=(int)Math.sqrt(l); i<=sqrt; i++) { if (l%i==0) { // System.out.println(l/i+"---"+i); long val1=0; if(!map.containsKey((int)(l/i))) val1=getVal(l/i); else{ val1=map.get((int)l/i); } // System.out.println(l/i+"---"+i); long val2=map.get(i); tmp=Math.max((l/i)*(val2), i*(val1)); } max=Math.max(tmp, max); } map.put((int)l, max+1); //} return map.get((int)l); } } }