import java.util.*;

public class Euler346 {

    static List<Long> strongRepunitsBelow(long limit) {
        Set<Long> values = new HashSet<>();
        if (limit > 1) {
            values.add(1L);
        }

        for (long base = 2;; base++) {
            // Stop if base * base could overflow or exceed limit structurally
            if (base > Long.MAX_VALUE / base)
                break; // Won't happen for 10^12

            long square = base * base;
            if (1 + base + square >= limit) {
                break;
            }

            long repunit = 1 + base + square;
            while (repunit < limit) {
                values.add(repunit);
                if (repunit > (limit - 1) / base) {
                    break;
                }
                repunit = repunit * base + 1;
            }
        }

        List<Long> sortedValues = new ArrayList<>(values);
        Collections.sort(sortedValues);
        return sortedValues;
    }

    public static String solve() {
        long limit = 1000000000000L;
        List<Long> values = strongRepunitsBelow(limit);
        long sum = 0;
        for (long v : values) {
            sum += v;
        }
        return String.valueOf(sum);
    }

    public static void main(String[] args) {
        System.out.println(solve());
    }
}
