#include <cstdio>
#include <cassert>
#include <algorithm>

using namespace std;

const int maxN = 1000000;
const int inf = 1e9;

int n, a, b, f[maxN + 1], x[maxN + 1];

int getMove( int i, int j ) {
  return max(a + f[i - j], b + f[(j + 1) / 2]);
}

int main() {
  assert(freopen("apricot.in", "r", stdin));
  assert(freopen("apricot.out", "w", stdout));

  assert(scanf("%d%d%d", &n, &a, &b) == 3);
  assert(n <= 2000);
  assert(a <= 2000);
  assert(b <= 2000);
  f[0] = -inf; f[1] = 0;
  x[0] = x[1] = 1;
  for (int i = 2; i <= n; i++) {
    x[i] = -1;
    f[i] = inf;
    int j = x[i - 1];
    int cur = getMove(i, j), next;
    while (j < i && cur >= (next = getMove(i, j + 1))) {
      cur = next;
      j++;
    }
    f[i] = cur;
    x[i] = j;
  }
  int ans = inf;
  for (int i = 1; i <= n - (n % 2); i++) {
    ans = min(ans, getMove(n, i));
  }
  printf("%d\n", ans);

  return 0;
}
