import java.util.Arrays; import java.util.LinkedList; import java.util.Scanner; public class Main { public static long MOD = 1000000007; public static void main(String[] args) { Scanner sc = new Scanner(System.in); final int N = sc.nextInt(); final int C = sc.nextInt(); final int V = sc.nextInt(); long[] min_cost = new long[2 * N + 1]; Arrays.fill(min_cost, Long.MAX_VALUE / 2 - 1); min_cost[1] = 0; // 目的の文字列をペーストで作る -> コピー -> 目的の文字列をペーストで作るの順序なので // 文字列を MAX コピペするのを前からやれば自然とこの順序にしたがう // (ナップザックDP の前からみたいな事をしなくていい) for(int i = 1; i <= N; i++){ for(int j = 2 * i, count = 1; j <= 2 * N; j += i, count++){ final long paste_cost = C + count * V; min_cost[j] = Math.min(min_cost[j], min_cost[i] + paste_cost); } } long min = Long.MAX_VALUE / 2 - 1; for(int i = N; i <= 2 * N; i++){ min = Math.min(min, min_cost[i]); } //System.out.println(Arrays.toString(min_cost)); System.out.println(min); } }