#include <cstdio>
#include <cassert>
#include <algorithm>

using namespace std;

const int maxN = 100000;
const int inf = 1e9;

int n, a, b, f[maxN + 1];

int main() {
  assert(freopen("apricot.in", "r", stdin));
  assert(freopen("apricot.out", "w", stdout));

  assert(scanf("%d%d%d", &n, &a, &b) == 3);
  for (int i = 0; i <= n; i++) {
    if (i == 0) {
      f[i] = -inf;
    } else if (i == 1) {
      f[i] = 0;
    } else {
      f[i] = inf;
      for (int j = 1; j < i; j++) {
        for (int k = 0; k <= j; k++) {
          // split into (j-k new + k good; j new)
          if (j * 2 - k <= i && k <= n - i) {
            // either it's equal, then we have i-(2j-k) new apricot,
            // or it is not, then we have j-k or j new apricot
            f[i] = min(f[i], max(a + f[i - (j * 2 - k)], b + max(f[j - k], f[j])));
//            fprintf(stderr, "%d -> ((%d new + %d good) vs (%d new)), (%d or %d), now %d\n", i, j - k, k, j,
//              a + f[i - (j * 2 - k)], b + max(f[j - k], f[j]), max(a + f[i - j], b + max(f[j - k], f[j])));
          }
        }
      }
    }
  }
  printf("%d\n", f[n]);

  return 0;
}
