#include <bits/stdc++.h>
using namespace std;
tuple<double, double, double> dp[101][101][101];
tuple<double, double, double> solve(int r, int s, int p) {
  if (get<0>(dp[r][s][p]) != -1) return dp[r][s][p];
  if (r == 0) return dp[r][s][p] = {0, 1, 0};
  if (s == 0) return dp[r][s][p] = {0, 0, 1};
  if (p == 0) return dp[r][s][p] = {1, 0, 0};
  double pr = 0, ps = 0, pp = 0;
  int N = r + s + p;
  int total_encounters = (N * (N - 1)) / 2;
  {
    double r_meet_s = (double)(r * s) / (double)total_encounters;
    auto [x, y, z] = solve(r, s - 1, p);
    pr = r_meet_s * x;
    ps = r_meet_s * y;
    pp = r_meet_s * z;
  }
  {
    double r_meet_p = (double)(r * p) / (double)total_encounters;
    auto [x, y, z] = solve(r - 1, s, p);
    pr += r_meet_p * x;
    ps += r_meet_p * y;
    pp += r_meet_p * z;
  }
  {
    double p_meet_s = (double)(p * s) / (double)total_encounters;
    auto [x, y, z] = solve(r, s, p - 1);
    pr += p_meet_s * x;
    ps += p_meet_s * y;
    pp += p_meet_s * z;
  }
  double x = (double)(total_encounters - r * s - r * p - p * s) /
             (double)total_encounters;
  return dp[r][s][p] = {pr / (1 - x), ps / (1 - x), pp / (1 - x)};
}
int main() {
  for (int i = 0; i < 101; i++)
    for (int j = 0; j < 101; j++)
      for (int k = 0; k < 101; k++) dp[i][j][k] = {-1, -1, -1};
  int r, s, p;
  cin >> r >> s >> p;
  auto [x, y, z] = solve(r, s, p);
  cout << fixed << setprecision(9);
  cout << x << " " << y << " " << z << endl;
}
