def ascan; gets.split.map(&:to_i); end
    
def trisearch(left, right, equal = nil, &block)
    99.times {
        l = right - (2 * right - 2 * left) / 3
        r = right - (right - left) / 3

        lval = block.call(l)
        rval = block.call(r)
        
        if (lval <= rval)
            right = r
        else
            left = l
        end
        
        return left if right - left <= 2
    }
    
    best = block.call(left);
    bestidx = left;
    (left+1).upto(right){|t|
        f = block.call(t)
        if best > f
            best = f; bestidx = t
        end
    }
    return nil if equal && equal != block.call(bestidx)
    return bestidx
end


K,A,B = ascan

if A+1 >= B
    # A
    p K+1
    exit
end

# yenに交換，bisに交換でB-A枚増加．
d = B-A

#step1．A枚作る．A-1ターン必要．
#step2．2*Tターン使ってA+d*T枚に増やす．

best = trisearch(0, (1e9.to_i+10000)) do |t|
    remT = K - (A-1 + 2*t)
    remT < 0 ? 0 : A+d*t+remT
end

p A+d*best + K - (A-1 + 2*best)

