#include <bits/stdc++.h>
using namespace std;
const int maxn = 10000001;
const long long INF = 0x7ffffffffffffff;
queue<int> q;
long long dp[maxn * 2], x, y;
int n;
bool inq[maxn * 2];
int main() {
  scanf("%d%I64d%I64d", &n, &x, &y);
  for (int i = 2; i <= n * 2; i++) dp[i] = INF;
  dp[0] = 0;
  dp[1] = x;
  q.push(1);
  inq[1] = true;
  while (!q.empty()) {
    int cur = q.front();
    q.pop();
    inq[cur] = false;
    if (dp[cur] + x < dp[cur - 1]) {
      dp[cur - 1] = dp[cur] + x;
      if (!inq[cur - 1] && cur - 1 != n) {
        inq[cur - 1] = true;
        q.push(cur - 1);
      }
    }
    if (cur < n && dp[cur] + x < dp[cur + 1]) {
      dp[cur + 1] = dp[cur] + x;
      if (!inq[cur + 1] && cur + 1 != n) {
        inq[cur + 1] = true;
        q.push(cur + 1);
      }
    }
    if (cur < n && dp[cur] + y < dp[cur * 2] && y < (long long)(cur)*x) {
      dp[cur * 2] = dp[cur] + y;
      if (!inq[cur * 2] && cur * 2 != n) {
        inq[cur * 2] = true;
        q.push(cur * 2);
      }
    }
  }
  printf("%I64d\n", dp[n]);
  return 0;
}
