fn main() {
    let ref mut buf = String::new();
    std::io::Read::read_to_string(&mut std::io::stdin(), buf).ok();
    let mut iter = buf.split_whitespace();

    macro_rules! scan {
        ([$t:tt; $n:expr]) => ((0..$n).map(|_| scan!($t)).collect::<Vec<_>>());
        (($($t:tt),*)) => (($(scan!($t)),*));
        (Usize1) => (scan!(usize) - 1);
        (Bytes) => (scan!(String).into_bytes());
        ($t:ty) => (iter.next().unwrap().parse::<$t>().unwrap());
    }

    let d = scan!(u32);
    let (a, b) = scan!((u32, u32));

    let mut pcost = d * b;
    for x in 1..=d {
        let cost = x * a + (d - x) * b;
        if pcost <= cost {
            break;
        }
        pcost = cost;
    }
    println!("{}", pcost);
}