import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); long n = scanner.nextLong(); System.out.println(maxScore(n)); scanner.close(); } private static long maxScore(long n) { long score = 0; // 贪心策略:每次选择当前数的最大真因子作为下一个数 while (n > 1) { score += n; // 找到n的最小质因子 long smallestPrime = smallestPrimeFactor(n); // 最大真因子 = n / 最小质因子 n = n / smallestPrime; } // 最后加上1(游戏结束时的石子数) score += 1; return score; } // 寻找n的最小质因子 private static long smallestPrimeFactor(long n) { // 偶数的最小质因子是2 if (n % 2 == 0) { return 2; } // 检查奇数因子,从3开始,步长为2 for (long i = 3; i * i <= n; i += 2) { if (n % i == 0) { return i; } } // 如果没有找到因子,说明n是质数,其最小质因子是自身 return n; } }