The Internet of Things (IoT) has become the infrastructure to widely support ubiquitous services. In this setting, a large number of smart object devices provide IoT services for people to carry on day-to-day activities. These services are easy to access, and thus, can be easily used by different users with different requirements through service allocation and composition. Nevertheless, with the increasing adoption and presence of IoT services, it becomes more difficult to find the appropriate IoT service compositions that can maximize the service utility of all the users' requests. Moreover, the IoT devices are usually resource constrained and cannot effectively finish some complex task of service requests, thereby reducing the service quality. To address this problem, we develop a novel IoT service allocation mechanism in collaborative device-edge-cloud architecture. First, prevalence of frequent function interaction is mined to help construct IoT service allocation index. Second, service requests' priority and their preferences towards branch nodes are further set and estimated to help maximize the service composition utility of multiple user requests. Third, edge device is exploited to help service execution and guarantee service allocation utility by offloading task from IoT devices. The results are demonstrated by conducting a set of extensive experiments, which show that the proposed method performs better than the alternative techniques in reducing the total energy consumption and promoting the service utility maximum.