#include <bits/stdc++.h>
template <class T>
inline void chkmax(T &x, const T &y) {
  if (x < y) x = y;
}
template <class T>
inline void chkmin(T &x, const T &y) {
  if (y < x) x = y;
}
template <class T>
inline void read(T &x) {
  char c;
  int f = 1;
  x = 0;
  while (((c = getchar()) < '0' || c > '9') && c != '-')
    ;
  if (c == '-')
    f = -1;
  else
    x = c - '0';
  while ((c = getchar()) >= '0' && c <= '9') x = x * 10 + c - '0';
  x *= f;
}
const long long INF = 1e18;
long long n, c0, c1;
long long comb(long long n, long long m) {
  long long ret = 1;
  for (long long i = 0; i < m; ++i) ret = ret * (n - i) / (i + 1);
  return ret;
}
long long calc(long long C) {
  long long ret = 0;
  for (long long i = 0; (1 << i) <= n; ++i) {
    if (i * c1 > C) break;
    long long j = (C - i * c1) / c0;
    ret += comb(i + j + 1, i + 1);
  }
  return ret;
}
long long sum(long long C) {
  long long ret = 0;
  for (long long i = 0; (1 << i) <= n; ++i) {
    if (i * c1 > C) break;
    long long j = (C - i * c1) / c0;
    ret +=
        c0 * (i + 1) * comb(i + j + 1, i + 2) + c1 * i * comb(i + j + 1, i + 1);
  }
  return ret;
}
int main() {
  read(n), read(c0), read(c1);
  if (c0 > c1) std::swap(c0, c1);
  if (!c0)
    printf("%lld\n", c1 * (n - 1));
  else {
    long long l = 0, r = 1;
    while (calc(r) < n - 1) r <<= 1;
    while (l < r) {
      long long mid = (l + r) >> 1;
      if (calc(mid) >= n - 1)
        r = mid;
      else
        l = mid + 1;
    }
    std::cout << (n - 1) * (c0 + c1) + (n - 1 - calc(r - 1)) * r + sum(r - 1)
              << std::endl;
  }
  return 0;
}
