import java.io.*;
import java.util.*;
import java.math.*;

public class Main2 {

   Scanner in;
   PrintWriter out;
   MathContext mc = new MathContext(30, RoundingMode.HALF_DOWN);

   void asserT(boolean e) {
      if (!e) {
         throw new Error();
      }
   }

   BigDecimal p1(BigDecimal pMoveFirst, BigDecimal pMoveSecond,
		   BigDecimal pWinPrevFirst, BigDecimal pWinPrevSecond) {
	   BigDecimal tmp1 = BigDecimal.ONE.subtract(pMoveFirst,mc);
	   BigDecimal tmp2 = BigDecimal.ONE.subtract(pMoveSecond,mc);
	   tmp1 = tmp1.multiply(tmp2,mc);
	   tmp1 = BigDecimal.ONE.subtract(tmp1,mc);
	   BigDecimal pMove = pMoveFirst.divide(tmp1,mc);
	   
	   tmp1 = BigDecimal.ONE.subtract(pWinPrevSecond,mc).multiply(pMove,mc);
	   tmp2 = BigDecimal.ONE.subtract(pMove,mc).multiply(pWinPrevFirst,mc);
	   
	   return tmp1.add(tmp2,mc);
   }

   BigDecimal min(BigDecimal a, BigDecimal b){
	  return a.compareTo(b) < 0 ? a : b;
   }
   
   BigDecimal max(BigDecimal a, BigDecimal b){
	  return a.compareTo(b) > 0 ? a : b;
   }
   
   BigDecimal p(int s, double pA, double pB) {
      asserT(s > 0);
      asserT(0.5 <= pA && pA < 1);
      asserT(0.5 <= pB && pB < 1);
      if (s > 1000) s = 1000;
      BigDecimal pMove[] = new BigDecimal[2];
      pMove[0] = BigDecimal.valueOf(pA);
      pMove[1] = BigDecimal.valueOf(pB);
      BigDecimal pWin[][] = new BigDecimal[2][2];
      pWin[0][0] = BigDecimal.ZERO;
      pWin[0][1] = BigDecimal.ZERO;
      for (int i = 1; i <= s; i++) {
         for (int first = 0; first <= 1; first++) {
            int second = 1 - first;
            int k = (i+1)&1;
            BigDecimal pWin00 = p1(BigDecimal.ONE.subtract(pMove[first]),
            						BigDecimal.ONE.subtract(pMove[second]),
            						pWin[k][first], pWin[k][second]);
            BigDecimal pWin01 = p1(BigDecimal.ONE.subtract(pMove[first]), pMove[second],
            						pWin[k][first], pWin[k][second]);
            BigDecimal pWin10 = p1(pMove[first], BigDecimal.ONE.subtract(pMove[second]),
            						pWin[k][first], pWin[k][second]);
            BigDecimal pWin11 = p1(pMove[first], pMove[second],
            						pWin[k][first], pWin[k][second]);

            pWin[i&1][first] = max(min(pWin00, pWin01), min(pWin10, pWin11));
         }
      }
      return pWin[s&1][0];
   }

   void solve() {
      in.useLocale(Locale.US);
      int s = in.nextInt();
      double pA = in.nextDouble();
      double pB = in.nextDouble();
      
      out.printf(Locale.US, "%.30f", p(s, pA, pB));
      out.println();
   }

   void run() {
      try {
         in = new Scanner(new InputStreamReader(System.in));
         out = new PrintWriter(System.out);
      } catch (Exception e) {
         throw new Error(e);
      }
      try {
         solve();
      } finally {
         out.close();
      }
   }

   public static void main(String args[]) {
      new Main2().run();
   }
}
