import java.io.*; import java.util.*; import java.text.*; import java.math.*; import java.util.regex.*; public class Solution { static long[] numSol; static long findSequence(long a){ //System.out.println("a is "+a); if(a==0){ return 0; } if(a<10000000 && numSol[(int)a]!=0){ //System.out.println("solution is there"); return numSol[(int)a]; } long returnValue=a; if(a%2==0 && a!=2){ returnValue+=findSequence(a/2); }else{ boolean isPrime=true; long lcm=0; for(long i=3;i<=Math.sqrt(a);i++){ //System.out.println(i); if(a%i==0){ //System.out.println("it is not prime"); lcm=i; isPrime=false; break; } } if(isPrime==true){ if(a!=1) returnValue+=1; }else{ long gcd=a/lcm; //System.out.println("gcd "+gcd); returnValue+=findSequence(gcd); } } //System.out.println("returnValue is "+returnValue); if(a<10000000) numSol[(int)a]=returnValue; return returnValue; } static long longestSequence(long[] a) { // Return the length of the longest possible sequence of moves. long ans=0; for(int i=0;i