import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.Scanner;

public class apricot_sm_n2 {

    int eq, neq;

    void solve() {
        int N = in.nextInt();
        eq = in.nextInt();
        neq = in.nextInt();
        f = new long[N + 1];
        Arrays.fill(f, -1);
        out.println(f(N, false));
    }

    long[] f;

    long f(int n, boolean hasCoin) {
        if (hasCoin && f[n] != -1) {
            return f[n];
        }
        if (n == 0) {
            return 0;
        }
        if (n == 1) {
            return 0;
        }
        long res = Long.MAX_VALUE;
        for (int i = 2; i < n; i += 2) {
            res = Math.min(res, Math.max(eq + f(n - i, true), neq + f(i / 2, true)));
        }
        if (n % 2 == 0) {
            res = Math.min(res, neq + f(n / 2, true));
        }
        if (hasCoin && n % 2 == 1) {
            res = Math.min(res, neq + f((n + 1) / 2, true));
        }
        if (res == Long.MAX_VALUE) {
            throw new AssertionError();
        }
        if (hasCoin) {
            f[n] = res;
        }
        return res;
    }


    Scanner in;
    PrintWriter out;

    private void run() throws IOException {
        in = new Scanner(new File("apricot.in"));
        out = new PrintWriter("apricot.out");
        solve();
        in.close();
        out.close();
    }

    public static void main(String[] args) throws IOException {
        new apricot_sm_n2().run();
    }

}
