#include <bits/stdc++.h>
using namespace std;
const unsigned long long MAXN = (1 << 20);
const unsigned long long MAXL = (unsigned long long)2e7 + 42;
unsigned long long n, x, y;
void read() { cin >> n >> x >> y; }
unsigned long long dist[MAXL];
bool in_queue[MAXL];
void bfs(unsigned long long st) {
  for (unsigned long long i = 0; i < MAXL; i++)
    dist[i] = (unsigned long long)1e18 + 42;
  deque<unsigned long long> Q;
  Q.push_front(st);
  dist[0] = 0;
  while (!Q.empty()) {
    unsigned long long u = Q.front();
    Q.pop_front();
    in_queue[u] = false;
    if (2 * u < MAXL && dist[2 * u] > dist[u] + y) {
      if (!in_queue[2 * u]) Q.push_back(2 * u);
      dist[2 * u] = dist[u] + y;
      in_queue[2 * u] = true;
    }
    if (x > 0 && dist[u - 1] > dist[u] + x) {
      if (!in_queue[u - 1]) Q.push_front(u - 1);
      dist[u - 1] = dist[u] + x;
      in_queue[u - 1] = true;
    }
    if (u + 1 < MAXL && dist[u + 1] > dist[u] + x) {
      if (!in_queue[u + 1]) Q.push_front(u + 1);
      dist[u + 1] = dist[u] + x;
      in_queue[u + 1] = true;
    }
  }
}
void solve() {
  bfs(0);
  cout << dist[n] << '\n';
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  read();
  solve();
  return 0;
}
