#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
const long long LINF = 0x3f3f3f3f3f3f3f3fLL;
const double PI = acos(-1.0);
const double EPS = 1e-8;
const int MOD = 1e9 + 7;
long long qpow(long long x, long long n, long long mod = MOD) {
  long long res = 1;
  while (n) {
    if (n & 1) res = res * x % mod;
    x = x * x % mod;
    n >>= 1;
  }
  return res;
}
namespace Solver {
void InitOnce() { int t; }
int n, x, y;
const int LIMIT = 2e7;
long long dis[LIMIT + 5];
bool vis[LIMIT + 5];
priority_queue<pair<long long, int> > PQ;
void Read() {
  int res = scanf("%d%d%d", &n, &x, &y);
  if (res == -1) exit(0);
}
void Solve() {
  memset(vis, 0, sizeof(vis));
  memset(dis, LINF, sizeof(dis));
  dis[n] = 0;
  PQ.push({-dis[n], n});
  while (!PQ.empty()) {
    int u = PQ.top().second;
    PQ.pop();
    if (vis[u]) continue;
    vis[u] = 1;
    if (vis[0]) continue;
    if (u % 2 == 0) {
      int v = u / 2;
      long long cost = min(1LL * y, 1LL * (u / 2) * x);
      if (vis[v] == 0 && dis[v] > dis[u] + cost) {
        dis[v] = dis[u] + cost;
        PQ.push({-dis[v], v});
      }
      continue;
    }
    int v = u - 1;
    if (vis[v] == 0 && dis[v] > dis[u] + x) {
      dis[v] = dis[u] + x;
      PQ.push({-dis[v], v});
    }
    v = u + 1;
    if (vis[v] == 0 && dis[v] > dis[u] + x) {
      dis[v] = dis[u] + x;
      PQ.push({-dis[v], v});
    }
  }
  printf("%lld\n", dis[0]);
}
}  // namespace Solver
int main() {
  Solver::InitOnce();
  while (true) {
    Solver::Read();
    Solver::Solve();
  }
  return 0;
}
