#include <bits/stdc++.h>
using namespace std;
struct chance {
  double r, s, p;
  chance operator*(const double x) { return {r * x, s * x, p * x}; }
  chance operator/(const double x) { return {r / x, s / x, p / x}; }
  chance operator+(const chance rhs) {
    return {r + rhs.r, s + rhs.s, p + rhs.p};
  }
  bool operator==(const chance rhs) const {
    return r == rhs.r and s == rhs.s and p == rhs.p;
  }
  bool operator!=(const chance rhs) const { return not operator==(rhs); }
} dp[100 + 1][100 + 1][100 + 1], null{-1, -1, -1};
chance get(int r, int s, int p) {
  if (dp[r][s][p] != null) return dp[r][s][p];
  if (r == 0) return dp[r][s][p] = get(0, s > 0, p > 0);
  if (s == 0) return dp[r][s][p] = get(r > 0, 0, p > 0);
  if (p == 0) return dp[r][s][p] = get(r > 0, s > 0, 0);
  chance p1 = get(r - 1, s, p) * p * r;
  chance p2 = get(r, s - 1, p) * r * s;
  chance p3 = get(r, s, p - 1) * s * p;
  return dp[r][s][p] = (p1 + p2 + p3) / (r * s + s * p + p * r);
}
int main() {
  int r, s, p;
  scanf("%d %d %d", &r, &s, &p);
  for (int i = 0; i < r + 1; i++)
    for (int j = 0; j < s + 1; j++)
      for (int k = 0; k < p + 1; k++) dp[i][j][k] = null;
  dp[0][0][0] = {0, 0, 0};
  dp[1][0][0] = dp[1][1][0] = {1, 0, 0};
  dp[0][1][0] = dp[0][1][1] = {0, 1, 0};
  dp[0][0][1] = dp[1][0][1] = {0, 0, 1};
  chance ans = get(r, s, p);
  printf("%.12f %.12f %.12f\n", ans.r, ans.s, ans.p);
  return 0;
}
