#include <bits/stdc++.h>
using namespace std;
long long d[20000010];
bool flag[20000010];
long long min(long long x, long long y) { return x < y ? x : y; }
long long min2(long long x, long long y, long long z) {
  if (x <= y && x <= z) {
    return x;
  }
  if (y <= x && y <= z) {
    return y;
  }
  return z;
}
int main() {
  long long n, x, y, maxInt;
  while (cin >> n >> x >> y) {
    d[1] = x;
    d[2] = min(2 * x, x + y);
    long long index = 4;
    while (1) {
      d[index] = min(d[index / 2] + y, d[index / 2] + index / 2 * x);
      if (index > n) {
        break;
      }
      index = index * 2;
    }
    int tmp = 4, tmp2 = 2;
    for (long long i = 4; i <= index; i = i + 2) {
      if (i == tmp) {
        d[i - 1] = min(d[i - 2] + x, d[i] + x);
        tmp *= 2;
        tmp2 = tmp2 * 2;
      } else {
        d[i] = min2(d[tmp2] + (i - tmp2) * x, d[tmp] + (tmp - i) * x,
                    d[i / 2] + y);
        d[i - 1] = min(d[i - 2] + x, d[i] + x);
      }
    }
    cout << d[n] << endl;
  }
  return 0;
}
